package cn.ainit.fx;

import java.util.Date;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import cn.ainit.sys.query.entity.QueryJson;
import org.springframework.web.bind.annotation.RequestBody;

public interface FaxingService {

	/***
	 * 获取折扣
	 * @param keyVal
	 * @param request
	 * @param session
	 * @return
	 */
	Map<String, Object> getDiscount(List<String> keyVal,
			HttpServletRequest request, HttpSession session) throws Exception;
	/**
	 * 获取商品库存
	 * @param keyVal
	 * @param request
	 * @param session
	 * @return
	 * @throws Exception
	 */
	Map<String, Object> getStockNumByHidStock(List<String> keyVal,
			HttpServletRequest request, HttpSession session) throws Exception;
	/**
	 * 执行sql语句的方法
	 * @param sql
	 * @return
	 * @throws Exception
	 */
	List execSql(String sql) throws Exception ;
	/**
	 * 对账结算中的根据客户拉取上期结余和预收结余的执行函数的方法
	 * @param clientId
	 * @return
	 * @throws Exception
	 */
	Double execFuncDZ(String clientId) throws Exception;
	/**
	 * 对账结算中的根据客户拉取预收结余的执行函数的方法
	 * @param clientId
	 * @return
	 * @throws Exception
	 */
	Double execYSFunc(String clientId) throws Exception;
	/**
	 * 对账结算中的根据客户拉取收款差异的执行函数的方法
	 * @param clientId
	 * @return
	 * @throws Exception
	 */
	Double execSKCYFunc(String clientId) throws Exception;
	/**
	 * 对账结算中的根据客户拉取总欠款的执行函数的方法
	 * @param clientId
	 * @return
	 * @throws Exception
	 */
	Double execZQKFunc(String clientId) throws Exception;
	/***
	 * 覆盖采样数据
	 * @param samples
	 * @return
	 * @throws Exception
	 */
	boolean saveSamples(SamplingList samples) throws Exception;
	/**
	 * 添加采样数据，返回已有的记录，提示是否累加
	 * @param samples
	 * @return
	 * @throws Exception
	 */
	SamplingList addSamples(SamplingList samples) throws Exception;
	/**
	 * 叠加采样数量
	 * @param samples
	 * @return
	 * @throws Exception
	 */
	boolean addSamplesCount(SamplingList samples) throws Exception;
	/**
	 * 获取采样数据
	 * @param oid
	 * @return
	 * @throws Exception
	 */
	SamplingList getSamples(String oid) throws Exception;
	/**
	 * 保存收款和预收之间的关系到第三方表中
	 * @param jsId
	 * @param ysData
	 * @return
	 * @throws Exception
	 */
	boolean saveDZYSFunc(String skId,String cid,List<Map<String, String>> ysData,String manId) throws Exception;
	/**
	 * 保存收款和到款之间的关系到第三方表中
	 * @param jsId
	 * @param ysData
	 * @return
	 * @throws Exception
	 */
	boolean saveSKDKFunc(String skId,String cid,List<Map<String, String>> ysData,String manId) throws Exception;
	/**
	 * 根据结算id查找对账预收的关联表中数据
	 * @param jsId
	 * @return
	 * @throws Exception
	 */
	List getDzysByJsId(String jsId) throws Exception;
	
	/*
	 * 销售对账根据客户ID获取所有能用的银行到款金额
	 */
	List DKMByClient(String clientId) throws Exception;
	/**
	 * 根据开票Id查找该开票单的明细数据
	 * @param jsId
	 * @return
	 * @throws Exception
	 */
	List getDzItemByJSId(String kpId,String flag) throws Exception;
	/**
	 * 根据客户Id查询客户地址的数量
	 * @param cid
	 * @param dsId
	 * @return
	 * @throws Exception
	 */
	Integer findCountByCId(String cid) throws Exception;
	/**
	 * 根据库房和商品查询商品数量不为零的架号
	 * @param stockId
	 * @param hId
	 * @return
	 * @throws Exception
	 * @author wyy
	 */
	String findShelfId(String stockId,String hId) throws Exception;
	
	/**
	 * 根据商品ID查询库存商品的数量
	 * @param hId
	 * @return
	 * @throws Exception
	 * @author wangkang
	 */
	String getAmountByHid(String hId) throws Exception;
	
	/**
	 * 根据客户Id得到客户的地址
	 * @param clientId
	 * @return
	 * @throws Exception
	 * @author wyy
	 */
	String findAdress(String clientId) throws Exception;
	/**
	 * 根据印刷说明单明细的主键值来查找主表中印刷厂对应的库房
	 * @param peItemId
	 * @return
	 * @throws Exception
	 */
	String findStockId(String peItemId) throws Exception;
	/**
	 * 执行sql 返回int
	 * @param sql
	 * @return
	 * @throws Exception
	 * @author wyang
	 * @date : 2014-2-14 下午01:47:09
	 */
	int execSqlToInt(String sql) throws Exception;
	/**
	 * 根据客户Id查询当前客户是否有账期
	 * @param clientId
	 * @return
	 * @throws Exception
	 */
	String zqByClientId(String clientId) throws Exception;
	/**
	 * 根据客户Id执行存储过程查询list
	 * @param clientId
	 * @return
	 * @throws Exception
	 */
	List listByClientId(String clientId) throws Exception;
	
	/**
	 * 根据业务员执行存储过程查询list
	 * @param oIdLastgr 业务员
	 * @throws 王康
	 */
	List listByoid(String oIdLastgr,String hid) throws Exception;
	
	/**
	 * 根据开票Id查询该开票单是否已经生成收款单
	 * @param kpId
	 * @return
	 * @throws Exception
	 */
	int pdCountByKPId(String kpId) throws Exception;
	/**
	 * 根据收款Id查询该客户的到款记录
	 * @param skId
	 * @return
	 * @throws Exception
	 */
	List getDkskBySkId(String skId) throws Exception;
	/**
	 * 待发货区中 业务审核的执行方法
	 * @param runIds
	 * @return
	 * @throws Exception
	 */
	String wyVerifyYW(List<String> runIds,String manId) throws Exception;
	/**
	 * 待发货区中 业务审核的执行方法
	 * @param runIds
	 * @return
	 * @throws Exception
	 */
	String wyVerifyDeap(List<String> runIds,String manId) throws Exception;
	/**
	 * 成本核算中公式计算
	 * @param runIds
	 * @return
	 * @throws Exception
	 */
	String gscalCulaButn(List<String> runIds,String manId) throws Exception;
	
	/**
	 * 成本核算中数量*单价
	 * @param runIds
	 * @return
	 * @throws Exception
	 */
	String amountUnitPrice(List<String> runIds,String manId) throws Exception;
	/**
	 * 部门审核中的保存
	 * @param allRows
	 * @return
	 * @throws Exception
	 */
	boolean bmSaveFunc(List<Map<String, String>> allRows) throws Exception;
	/**
	 * 确认发货
	 * @param  
	 * @return
	 * @throws Exception
	 */
	String sureFH(String manId,String runids) throws Exception;
	/**
	 * 待发货区中的合并发货
	 */
	String clientsureFH(String manId,String runids) throws Exception;
	/**
	 * 取消验证
	 * @param runIds
	 * @return
	 * @throws Exception
	 */
	boolean qxDeapVerifyFunc(List<String> runIds) throws Exception;
	/**
	 * 业务取消发货
	 * @param runIds
	 * @return
	 * @throws Exception
	 */
	boolean qxYwFH(String runIds) throws Exception;
	/**
	 * 开票申请中的确认开票
	 * @param kpId
	 * @return
	 * @throws Exception
	 */
	boolean sureKP(String kpId) throws Exception;
	
	/**
	 * 更改确认开启状态
	 * @param kpId
	 * @return
	 * @throws Exception
	 */
	boolean kpsqzt(String kpId) throws Exception;
	/**
	 * 银行到款中剩余金额转预收
	 * @param allRows
	 * @return
	 * @throws Exception
	 */
	String dkToYSFunc(String djId,String manId) throws Exception;
	/**
	 * 销售退款中的冲减记录
	 * @param xtId
	 * @return
	 * @throws Exception
	 */
	List getCJxtByXtId(String xtId) throws Exception;
	/**
	 * 销售退货中的临时表数据
	 * @return
	 * @throws Exception
	 */
	List getTempData() throws Exception;
	
	/**
	 * 收款核销中的临时表数据(预收)
	 * @return
	 * @throws Exception
	 */
	List findYsData(String skId,String clientId) throws Exception;
	
	/**
	 * 收款核销中的临时表数据（到款）
	 * @return
	 * @throws Exception
	 */
	List findDkData(String skId,String clientId) throws Exception;
	
	/**
	 * 保存销售和销退的关系到第三方表中
	 * @param jsId
	 * @param ysData
	 * @return
	 * @throws Exception
	 */
	boolean saveXSXTFunc(String xtId,List<Map<String, String>> xtData,String manId,String clientId) throws Exception;
	/**
	 * 保存冲减的弹窗临时数据
	 * @param selRows
	 * @return  
	 * @throws Exception
	 */
	boolean saveTempDataFunc(List<Map<String, String>> selRows) throws Exception;
	/**
	 * 保存冲减的弹窗临时数据（预收）
	 * @param selRows
	 * @return  saveCacheYS
	 * @throws Exception
	 */
	boolean saveCacheYS(List<Map<String, String>> selRows,String skid) throws Exception;
	
	/**
	 * 保存冲减的弹窗临时数据（到款）
	 * @param selRows
	 * @return  saveCacheYS
	 * @throws Exception
	 */
	boolean saveCacheDK(List<Map<String, String>> selRows,String skid) throws Exception;
	
	/**
	 * 删除冲减的临时表数据
	 * @param delRows
	 * @return
	 * @throws Exception
	 */
	boolean delTemoDataFunc(List<Map<String, String>> delRows) throws Exception;
	/**
	 * 执行语句返回boolean
	 * @param sql
	 * @return
	 * @throws Exception
	 */
	boolean execSqlB(String sql) throws Exception;
	/**
	 * 销售出库中
	 * @param clientId
	 * @return
	 * @throws Exception
	 */
	List moreAddByCId(String clientId) throws Exception;
	
	/***
	 * 客户添货中
	 * @param cId
	 * @return
	 * @throws Exception
	 ***/
	List getAddressGoodsByCId(String cId) throws Exception;
	
	/**
	 * 银行到款
	 * @param cId
	 * @return
	 * @throws 
	 **/
	List getDkAccountByClient(String bankaccount) throws Exception;

	/**
	 * 客户到款清除金额
	 * @param chid
	 * @return
	 * @throws Exception
	 */
	String removemoney(String chid) throws Exception;
	/**
	 * 客户预收清除金额
	 * @param chid
	 * @return
	 * @throws Exception
	 */
	String cjbremovemoney(String chid) throws Exception;
	/**
	 * 包册数
	 */
	List CountPackNum(String hid,String amount) throws Exception;
	/**
	 * 根据客户id和商品id获取销售退货商品对应折扣
	 * @param stockId
	 * @param hId
	 * @return
	 * @throws Exception
	 */
	String getXtDiscount(String cid,String hId) throws Exception;
	/**
	 * 应付费用单关联表的临时保存
	 */
	String yfdSaveBefore(@RequestBody List<Map<String, Object>> allRows,HttpServletRequest request,HttpSession session);
	
	/**
	 *根据对象id，获取银行账号
	 * @param xtId
	 * @param request
	 * @return
	 */
	public List getcontractnobyzcid(String mb);
	
	/**
	 * 收款核销中的临时表数据(预收)
	 * @return
	 * @throws Exception
	 */
	List findZcYsData(String VENDORID) throws Exception;

    /**
     * 出版社预收清除金额
     * @param chid
     * @return
     * @throws Exception
     */
    String cbsremovemoney(String chid) throws Exception;
    /**
     * 出版社保存收款和预收之间的关系到第三方表中
     * @param jsId
     * @param ysData
     * @return
     * @throws Exception
     */
    boolean saveCBSDZYSFunc(String skId,String YSID,String PUB_ID,List<Map<String, String>> ysData,String manId) throws Exception;



    /**
     *根据出版社id，获取银行账号
     * @param xtId
     * @param request
     * @return
     */
    public List getcontractnobycbsid(String mb);




    /**
     *根据付款对象id，拉对对应的 所有已对账未收票的对账单
     * @param VENDOR_ID
     * @return
     */
    public List getcontractnobyfkdxid(String VENDOR_ID);

    /**
     *根据付款对象id，拉对对应的 所有已对账未收票,未被使用的 作者对账单    (作者核销单使用)
     * @param VENDOR_ID
     * @return
     */

    public List getcontractnobyzzfkdxid(String VENDOR_ID);
    public List getcontractnobyzzfkdxid(String VENDOR_ID, String AUTHOR);
    public List getcontractnobyzzfkdxid(String hxdId, Date begin, Date end, String XT_ID, String VENDOR_ID, String AUTHOR);


    /**
     * 保存冲减弹窗的临时数据   (作者核销单使用)
     * @param selRows
     * @return
     * @throws Exception
     */
    boolean saveCacheYF(List<Map<String, String>> selRows,String skid) throws Exception;


    /**
     * 作者核销单中的临时表数据（预付）
     * @return
     * @throws Exception
     */
    List findYFData(String skId,String clientId) throws Exception;

    /**
     * 根据付款对象，查询预付金额之和  （所有的可用金额）
     * @param JIAFANG   付款对象
     * @return
     * @throws Exception
     */

    public double getzzyfdSum_yfmoney(String JIAFANG ) throws Exception;

    /**
     * 保存预付款等数据到第三方表中
     * @param jsId
     * @param ysData
     * @return
     * @throws Exception
     */
    double saveYFFunc(String skId,String cid,String djcode,List<Map<String, String>> ysData,String manId) throws Exception;


    /**
     * 使用预付清除金额
     * @param chid
     * @return
     * @throws Exception
     */
    String zzhxdremovemoney(String djcode) throws Exception;

    /**
     * 判断弹框界面的预付单，是否要清楚数据   (作者核销单)
     * @param chid
     * @return
     * @throws Exception
     */
    int selremove(String djcode,String YF_ID) throws Exception;

    /**
     * 费用报销清除金额
     * @param chid
     * @return
     * @throws Exception
     */
    String bxfyremovemoney(String chid) throws Exception;

    /**
     * 费用报销保存关系到第三方表中
     * @param jsId
     * @param ysData
     * @return
     * @throws Exception
     */
    boolean saveBxfyYSFunc(String skId,String YSID,String XT_ID,List<Map<String, String>> ysData,String manId) throws Exception;

    /**
     *根据选题名称id，计算该选题下所有的印数   (营销预算额度表)
     * @param VENDOR_ID
     * @param request
     * @return
     */

    public int getYINSHUsum(String VENDOR_ID,String YINCI) throws Exception;

    /**
     *根据选题名称id，获得定价   (营销预算额度表)
     * @param VENDOR_ID
     * @param request
     * @return
     */
    public List getcontractnobyxtid(String VENDOR_ID);


    /**
     *  (客户回款计划)
     * @param VENDOR_ID    片区经理
     * @param request
     * @return
     */
    public List getcontractnobykhhkjh(String VENDOR_ID,String KH_DATE) throws Exception;

    /***
     * 加载客户实销上报统计（按日）
     * @param dsId
     * @param date1
     * @param date2
     * @param date3
     * @return ,String date2,String date3
     * @throws Exception
     */
    QueryJson loadclientbyData(String dsId,String date1) throws Exception;



    /**
     * 根据报销费用ID查询关联表中的报销费用是否重复
     * @param bxId
     * @return
     * @throws Exception
     */
    List getfindbxData(String bxId) throws Exception;
}
